package com.voicechat.firstmet.base;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;

/**
 * Created by taoyong on 2017/3/13.
 * <p/>
 * 初始fragment父类
 */
public abstract class BaseFragment extends Fragment {
    private static final String TAG = "BaseFragment";
    protected View view;
    protected Context context;
    protected Activity activity;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(loadLayout(), null);
    }

    /**
     * 加载页面布局
     *
     * @return
     */
    protected abstract int loadLayout();

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        view = getView();
        context = getActivity();
        activity = getActivity();
        initLayout(savedInstanceState);
    }

    /**
     * 初始化布局及其他操作
     *
     * @param savedInstanceState
     */
    protected abstract void initLayout(Bundle savedInstanceState);

    /**
     * 得到控件的方法
     *
     * @param resId 控件的ID
     * @param <T>   控件所属类
     * @return 控件
     */
    protected <T extends View> T findTById(int resId) {
        return (T) view.findViewById(resId);
    }

    /**
     * 提示框
     *
     * @param value
     */
    protected void toast_MakeText(String value) {
        Toast.makeText(context, value, Toast.LENGTH_SHORT).show();
    }

    private int index = -1;

    public int getIndex() {
        return index;
    }

    /**
     * 根据传入的index参数来设置选中的tab页。
     *
     * @param index 每个tab页对应的下标。
     */
    protected void setTabSelection(int index) {
        if (this.index == index) {
            return;
        }
        //System.out.println("-------------------------" + this.index);
        // 每次选中之前先清楚掉上次的选中状态
        clearSelection();
        // 开启一个Fragment事务
        FragmentTransaction transaction = getFragmentManager().beginTransaction();
        // 先隐藏掉所有的Fragment，以防止有多个Fragment显示在界面上的情况
        hideFragments(transaction);
        showFragment(transaction, index);
        transaction.commit();
        this.index = index;
    }

    /**
     * 清除掉所有的选中状态。
     */
    protected void clearSelection() {
    }

    /**
     * 将所有的Fragment都置为隐藏状态。
     *
     * @param transaction 用于对Fragment执行操作的事务
     */
    protected void hideFragments(FragmentTransaction transaction) {
    }

    /**
     * 将需要使用的Fragment都置为显示状态。
     *
     * @param transaction 用于对Fragment执行操作的事务
     */
    protected void showFragment(FragmentTransaction transaction, int index) {
    }


}